package org.jim.core.helper.cs;

import org.jim.core.packets.pub.pojo.JimChatBody;
import org.jim.core.packets.cs.session.vo.JimCsMessageResp;
import org.jim.core.packets.cs.user.vo.UserMessageData;

import java.util.List;

/**
 * @FileName:
 * @Description:
 * @Author linjie
 * @Date 2020/7/294:02 PM
 * @Version 4.0.0
 */
public interface ICsChatHelper {

    /**
     * 消息持久化db写入
     *
     * @param chatBody 消息记录
     */
    void writeDbMessage(JimChatBody chatBody);


    /**
     * cache消息写入
     *
     * @param timelineTable 持久化表
     * @param timelineId    持久化ID
     * @param chatBody      消息记录
     */
    void writeOfflineMessage(String timelineTable, String timelineId, JimChatBody chatBody);

    /**
     * 客户 获取与租户历史消息;
     *
     * @param userId    用户ID
     * @param csUserId  客服id
     * @param beginTime 消息区间开始时间e
     * @param endTime   消息区间结束时间
     * @param offset    分页偏移量
     * @param count     数量
     * @return
     */
    List<JimCsMessageResp> getCsHistoryMessage(String userId, String csUserId, Double beginTime, Double endTime, Integer offset, Integer count);


    /**
     * 用户获取与指定商家客服离线消息;
     *
     * @param userId     用户ID
     * @param csTenantId 商家租户ID
     * @return
     */
    UserMessageData getCsOfflineMessage(String userId, String csTenantId);

    /**
     * 用户获取与所有离线消息;
     *
     * @param userId 用户ID
     * @return
     */
    UserMessageData getCsOfflineMessage(String userId);


    /**
     * 客服获取与指定用户离线消息;
     *
     * @param userId     分配给某个客服的用户
     * @param csTenantId 某个租户
     * @return
     */
    UserMessageData getOfflineMessage(String userId, String csTenantId);


    /**
     * 客服获取与所有用户的离线消息;
     *
     * @param csTenantId 租户Id
     * @param userIds    分配给客服的用户
     * @return
     */
    UserMessageData getOfflineMessage(String csTenantId, String... userIds);

    /**
     * 客户查询与租户的聊天记录
     *
     * @param userId     客户id
     * @param csTenantId 租户id
     * @param beginTime  开始时间
     * @param endTime    结束时间
     * @param offset     第几页 从0开始
     * @param count      每页数量
     * @return
     */
    List<JimCsMessageResp> getHistoryMessage(String userId, String csTenantId, Double beginTime, Double endTime, Integer offset, Integer count);


}
